Digital video capabilities can be incorporated into a wide range of devices, including digital televisions, digital direct broadcast systems, wireless communication devices, portable digital assistants (PDAs), laptop computers, desktop computers, direct two-way communication devices (sometimes referred to as “walkie-talkies”), digital music and video devices, such as “iPods,” and radiotelephones such as cellular, satellite or terrestrial-based radiotelephones. These and other video devices can provide significant improvements over conventional analog video systems in creating, modifying, transmitting, storing, and playing full motion video sequences.
A number of video processing and coding techniques have been established for communicating digital video sequences. The Moving Picture Experts Group (MPEG), for example, has developed a number of video coding standards including MPEG-1, MPEG-2 and MPEG-4. Other standards include the ITU H.263 standard and the emerging ITU H.264 standard, both developed by the International Telecommunications Union (ITU). The ITU H.264 standard is also set forth in MPEG-4, Part 10, entitled “Advanced Video Coding.” A number of proprietary standards have also been developed by various companies, and new standards continue to emerge and evolve.
These and other video standards make use of data compression. For example, many video coding techniques utilize graphics and video compression algorithms designed to compress data by exploiting temporal or inter-frame correlation, to provide inter-frame compression. The inter-frame compression techniques exploit data redundancy across frames by converting pixel-based representations of some image frames to motion representations. In addition, the video compression techniques may also use similarities within image frames, referred to as spatial or intra-frame correlation, allowing for intra-frame compression.
Inter-frame compression is typically achieved via motion estimation and motion compensation coding techniques. In motion estimation encoding, a video block to be coded is compared to video blocks of a reference frame (such as the previously coded frame) in order to find a similar video block (referred to as a prediction video block). The prediction video block is identified by a motion vector, and can be used to code the current video block via motion compensation encoding.
The motion compensation encoding process includes creating a difference block indicative of the differences between the current video block to be coded and the prediction video block. In particular, motion compensation encoding usually refers to the act of fetching the best prediction block using a motion vector, and then subtracting the best prediction from an input block to generate a difference block (referred to as the residual or the residual video block). The residual video block typically includes substantially less data than the original video block to be coded. After motion compensation has created the residual, a series of additional steps can also be performed to further compress the data.
On the decoding side, motion compensation is typically the most bandwidth-intensive portion of the video decoding process. For motion compensation decoding, the residual video block is added back to the prediction video block that was used to code the residual. During this process, the prediction video blocks of the reference frame need to be fetched using the motion vectors that identify such video blocks in the reference frame. These memory fetches associated with motion compensation decoding are bandwidth-intensive, and can become even more inefficient as block sizes decrease and resolution improves.